package com.coderman.spring.aopscale.annotations;




import com.coderman.spring.aopscale.enums.ErrorReturnModel;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Created  on 2018-9-19.
 *
 * @author: fanchunshuai
 * @version: V1.0
 * @Desc:
 */
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) //次注解只能作用于属性上
public @interface RequestLogic {
    /**
     * 验证参数是否需要非空校验
     * 开启之后会对入参进行判空，
     * 如Integer,String
     * xxDto,xxList
     * 基本类型根据 @validModel注解进行数据边界检查
     * @return
     */
    boolean paramNotNull() default  false;

    /**
     * @paramNotNull 开启之后对封装类型，和基本类型
     *
     * 以及String值进行判断
     * 支持模式
     * >0
     * <0
     * >0&<10
     *
     * =100
     * =abc
     * !=1
     * !=''
     *
     * in(-1,10,11)
     * in(a,b,cd,d)
     * notin(-1,10,11)
     * notin(a,b,c,d)
     *
     * 正则表达式
     * (^[0-9]*[1-9][0-9]*$)
     * @return
     */
    String  []validModel() default  "";

    /**
     * 是否需要打印复杂对象
     * 实体，集合
     * 默认false,基本类型的入参默认打印
     * @return
     */
    boolean logInParam() default false;

    /**
     * 是否需要打印复杂对象
     * 实体，集合
     * 默认false,基本类型的入参默认打印
     * @return
     */
    boolean logOutParam() default false;

    /**
     * 是否继续方法耗时计算
     * 默认faslse
     * @return
     */
    boolean exeTime() default  false;

    /**
     * 默认返回空
     * @return
     */
    ErrorReturnModel errReturnModel() default ErrorReturnModel.NULL;

}
